#include <stdio.h>
#include <stdlib.h>
 struct student{    /*定义学生数据结构体*/
 	int num;
 	char name[20];
 	char date[20];
 	char grade[20];
 };

 FILE *openfile(char *openmode){          /*打开文件*/
	 FILE *fp;
		if((fp=fopen("stu.txt",openmode))==NULL){
			printf("File open error!\n");
			exit(0);
		}
		return (fp);
}

void writing(FILE *fp){            /*输入学生数据*/
	int i,j,idx,n;
	struct student stu[100],tmp;
	printf("输入几位学生的数据？(<=100):\n");
	scanf("%d",&n);
	if(n>100){
		printf("Input Error.\n");
		return;
	}
	printf("*** 请输入%d位学生的信息 ***\n",n);
	printf("学号     姓名 出生年月     班级\n");
	for(i=0;i<n;i++){
		scanf("%d %s %s %s",
			&stu[i].num,stu[i].name,stu[i].date,stu[i].grade);
	}
	
	/******从文本读入历史数据,一同排序******/
	
	if(fp!=NULL&&fclose(fp)){                            /*关闭文件*/
		printf("Can not close the file!\n");
		exit (0);
	}
	char s_num[8],s_name[8],s_date[8],s_grade[8];
	fp=openfile("r");
	if(!feof(fp)) fscanf(fp,"%s %s %s %s",s_num,s_name,s_date,s_grade);
	for(;;i++){
		fscanf(fp,"%d %s %s %s",
			&stu[i].num,stu[i].name,stu[i].date,stu[i].grade);
		if(feof(fp)) break;
	}
	n=i;
	if(fp!=NULL&&fclose(fp)){                            /*关闭文件*/
		printf("Can not close the file!\n");
		exit (0);
	}
	
	fp=openfile("w");
//////////////////////////////////
	for(j=0;j<n;j++){             /*用选择排序法对输入学生信息排序*/
		idx=j;
		for(i=j;i<n;i++){                     
			if(stu[i].num<stu[idx].num){
				idx=i;
			}
		}
		if(idx!=j){
			tmp=stu[idx];
			stu[idx]=stu[j];
			stu[j]=tmp;
		}
	}
	
	fprintf(fp,"%-12s %-6s %-18s %-10s\n","学号","姓名","出生年月日","班级");
	for(i=0;i<n;i++){
		fprintf(fp,"%-10d %-6s %-12s %-10s\n",
			stu[i].num,stu[i].name,stu[i].date,stu[i].grade);
	}
	printf("*** 输入结束 ***\n");
	if(fclose(fp)){                            /* 关闭文件 */
		printf("Can not close the file!\n");
		exit (0);
	}
}

void show(FILE *fp){            /* 显示学生信息 */
	int i;
	char str[60];
	printf("*** 内容如下 ***\n");
	while( fgets (str, 60, fp)!=NULL ) {
      puts(str);
   }
	printf("\n*** 显示结束 ***\n");
}

int main()
{
	FILE *fp;
	int choice;
	// fp=openfile("a");
	// fprintf(fp,"%-10s %-6s %-12s %-10s\n","学号","姓名","出生年月日","班级");
	while(1){
		printf("#######################################\n");    /*显示操作提示信息*/
		printf("##  请输入：                         ##\n");     
		printf("##  1.输入学生数据，并保存。         ##\n");
		printf("##  2.打开学生数据文件，显示学生信息.##\n");
		printf("##  3.退出。                         ##\n");
		printf("#######################################\n");
		
		scanf("%d",&choice);
		if (choice==3){                       /*若输入3，退出*/
			printf("*** EXIT ***\n");
			break;
		}
		switch(choice){
			case 1:                           /* 若输入1，输入学生数据，并保存 */
				fp=openfile("a");
				writing(fp);
				break;
			case 2:                            /* 若输入2，打开学生数据文件，显示学生信息 */
				fp=openfile("r");
				show(fp);
				break;
			default: 
				printf("Input Error.\n");      /* 提示输入非法 */
				break;
		}
	}

	if(fp!=NULL&&fclose(fp)){                            /*关闭文件*/
		printf("Can not close the file!\n");
		exit (0);
	}
	return 0;
}

/*
学号        姓 名   出生年月日     班级
20160021   李 敏	  1998-09-01    soft1613
20160001   王 宏	  1998-02-01    soft1614
Student number, name, date of birth, class
*/

